#ifndef WORLDMODEL_HPP
#define WORLDMODEL_HPP
#include "layermodel.hpp"
#include "creature.hpp"
#include "solid.hpp"
#include <cassert>
using namespace std;

class Creature;
class Solid;

void ReleaseObject(Object* obj);
void DrawPlayerInfo();

/* @brief 存储世界的类，用于存储整个世界的信息 */
class WorldModel{
public:
    WorldModel();
    /* @brief 注册玩家。
     * @warn 玩家需要使用这个函数来注册，而不是AddCreature*/
    void RegistPlayer(Creature* player);
    void RegistObject(Object* object);
    void RegistLayer(LayerModel* layer);
    void ChangeLayer(LayerModel* layer);
    LayerModel* GetLayer();

    /* @brief 删除所有的物体并释放内存*/
    void DeleteAll();

    /* @brief 删除物体并释放内存*/
    void DeleteObject(Object* object);

    void Draw();
    void Update();
    ~WorldModel();
private:
    ObjectList _objects;
    vector<LayerModel*> _layers;
    vector<Creature*> _creatures;
    LayerModel* _cur_layer;
};

extern WorldModel worldmodel;

#endif
